#include <cstdio>
#include <stack>
#include <cstring>
using namespace std;

//struct Edge {
//	int u, v;
//	Edge(): u(0), v(0) { }
//	Edge(int u, int v): u(u), v(v) { }
//};

//Edge E[2010];
int E2[2010][2010];

int N, M;
int U, V;

bool book[1010];

bool dfs(int e) {
	stack<int> st;
	st.push(U);
	memset(book, 0, sizeof(book));
	while (!st.empty()) {
		int s = st.top(); st.pop();
		book[s] = true;
		if (s == V) {
			return true;
		}
		for (int i=1; i<=N; i++) {
			if (E2[s][i] > 0 && i != e && !book[i]) {
				st.push(i);
			}
		}
	}
	return false;
}

int main() {
	scanf("%d%d", &N, &M);
	for (int i=1; i<=M; i++) {
		int u, v;
		scanf("%d%d", &u, &v);
		//E[i] = Edge(u, v);
		E2[u][v] = 1;
		E2[v][u] = 1;
	}
	scanf("%d%d", &U, &V);
	if (!dfs(0)) {
		printf("-1\n");
		return 0;
	}
	int cnt = 0;
	for (int i=1; i<=N; i++) {
		if (i==U || i==V) continue;
		if (!dfs(i)) cnt++;
	}
	printf("%d\n", cnt);
	return 0;
}
